package plgbasev0

//
//func OnHttpCmd(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//	rec.CheckDecodeBody()
//
//	rval, errcode, err := OnPlugRecvCmd(rec.Req)
//	if err != nil {
//		rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//	} else {
//		if rval == nil {
//			rec.ResponseJSONValues("code", 0)
//		} else if json, ok := rval.(*wrapper.SuperValue); ok {
//			PrjHttpUtils.ResponseJSON2(w, json)
//		}
//	}
//}
//
//func OnHttpReload(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//	rec.CheckDecodeBody()
//
//	if len(conf_file) > 0 {
//		err := DoReloadPlugFromJSONFile()
//		if err != nil {
//			rec.ResponseJSONValues("code", -1, "errcode", ERR_INNER, "msg", err.Error())
//		} else {
//			rec.ResponseJSONValues("code", 0)
//		}
//	} else {
//		rec.ResponseJSONValues("code", -1, "msg", "启动参数没有指定配置文件!")
//	}
//}
//
//func doPlugHttpIndex(plug interface{}, rec *PrjHttpRec) bool {
//	if intf, ok := plug.(IHttpIndex); ok {
//		rval, errcode, err := intf.OnHttpIndex(rec)
//		if err != nil {
//			rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//		} else {
//			if json, ok := rval.(*wrapper.SuperValue); ok {
//				PrjHttpUtils.ResponseJSON2(rec.RespW, json)
//			}
//		}
//		return true
//	} else {
//		return false
//	}
//}
//
//func doPlugHttpDo(plug interface{}, rec *PrjHttpRec) bool {
//	if intf, ok := plug.(IHttpDo); ok {
//		rval, errcode, err := intf.OnHttpDo(rec)
//		if err != nil {
//			rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//		} else {
//			if json, ok := rval.(*wrapper.SuperValue); ok {
//				PrjHttpUtils.ResponseJSON2(rec.RespW, json)
//			}
//		}
//		return true
//	} else {
//		return false
//	}
//}
//
//func doPlugHttpStatus(plug interface{}, rec *PrjHttpRec) bool {
//	if intf, ok := plug.(IHttpStatus); ok {
//		rval, errcode, err := intf.OnHttpStatus(rec)
//		if err != nil {
//			rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//		} else {
//			if json, ok := rval.(*wrapper.SuperValue); ok {
//				PrjHttpUtils.ResponseJSON2(rec.RespW, json)
//			}
//		}
//		return true
//	} else {
//		return false
//	}
//}
//
//func OnHttPlugService(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//
//	rec.CheckDecodeBody()
//	defer rec.Close()
//	uri := r.URL.Path
//	uri = strings.TrimPrefix(uri, "/plug/")
//	if len(uri) == 0 {
//		http.Error(w, fmt.Sprintf("invalid url(%s)!", uri), 503)
//		return
//	}
//	plugid, path := utils.CutPrefixByRune(uri, 0, 0, '/')
//	if len(plugid) == 0 {
//		//http.Error(w, fmt.Sprintf("invalid url(%s)!", uri), 503)
//		plugid = path
//		path = ""
//	}
//
//	obj := FindPluginByID(plugid)
//
//	if obj == nil {
//		http.Error(w, fmt.Sprintf("plug:%s not found!", plugid), 404)
//	} else {
//		rec.PlugPath = path
//		if len(path) <= 1 { // "/", ""
//			if !doPlugHttpIndex(obj, rec) {
//				http.Error(w, fmt.Sprintf("plug:%s not support IHttpIndex", plugid), 503)
//			}
//			return
//		}
//
//		remainPath := strings.TrimPrefix(path, "/")
//
//		/**
//		  "do"
//		  "do/xxx
//		*/
//		action, remainPath1 := utils.CutPrefixByRune(remainPath, 0, 0, '/')
//		if len(action) == 0 {
//			action = remainPath1
//			remainPath1 = ""
//		}
//		rec.UriAction = action
//		actionlstr := strings.ToLower(action)
//		if strings.Compare(actionlstr, "do") == 0 {
//			if doPlugHttpDo(obj, rec) {
//				return
//			}
//		} else if strings.Compare(actionlstr, "status") == 0 {
//			if doPlugHttpStatus(obj, rec) {
//				return
//			}
//		}
//
//		if !doPlugHttpIndex(obj, rec) {
//			http.Error(w, fmt.Sprintf("plug:%s not support IHttpIndex", plugid), 503)
//		}
//		return
//	}
//}
//
//func OnHttPlugStatus(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//	rec.CheckDecodeBody()
//	defer rec.Close()
//	plugid := rec.QryAsString("id", "")
//	if len(plugid) == 0 {
//		json := wrapper.NewSVObject()
//		json.SetKeyValues("runsecs", PrjHttpUtils.GetRunSecs(), "buildtime", BUILD_TIME, "uuid", PrjConf.APP_UUID)
//		w.Write(json.AsJSONBytes(false))
//		return
//	}
//	obj := FindPluginByID(plugid)
//	if obj == nil {
//		http.Error(w, fmt.Sprintf("plug:%s not found!", plugid), 503)
//	} else {
//		if intf, ok := obj.(IHttpStatus); ok {
//			rval, errcode, err := intf.OnHttpStatus(rec)
//			if err != nil {
//				rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//			} else {
//				if json, ok := rval.(*wrapper.SuperValue); ok {
//					PrjHttpUtils.ResponseJSON2(w, json)
//				}
//			}
//		} else {
//			http.Error(w, fmt.Sprintf("plug:%s not support IHttpStatus", plugid), 503)
//		}
//	}
//}
//
//func OnHttPlugChanged(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//	rec.CheckDecodeBody()
//	defer rec.Close()
//	plugid := rec.QryAsString("id", "")
//	confrow := wrapper.NewSVObject();
//	confrow.SetKeyValues("id", "id", "type", "type", "err", "err", "t", "time", "conf", "conf")
//	json := wrapper.NewSVArray();
//
//	plug_log_queue.Range(func(args ...interface{}) bool {
//		rec := args[0].(*PlugChangedLogRec)
//		if (plugid!=rec.id) && len(plugid) >0{
//			return true;
//		}
//		itm := json.AppendObject();
//		itm.SetKeyValues("id", rec.id, "type", rec.plugtype, "t", utils.DateTimeString(rec.t))
//		if rec.conf!=nil{
//			itm.SetKeyValue("conf", rec.conf.AsJSONString(false))
//		}
//		if rec.err != nil{
//			itm.SetKeyValue("err", rec.err.Error())
//		}
//		return true;
//	})
//
//	strTitle := confrow.AsJSONString(true)
//
//	css := wrapper.NewSVArray();
//	{
//		c1 := css.AppendObject()
//		c1.SetKeyValues("id", "id", "width", "150px");
//	}
//	{
//		c1 := css.AppendObject()
//		c1.SetKeyValues("id", "t", "width", "180px");
//	}
//	{
//		c1 := css.AppendObject()
//		c1.SetKeyValues("id", "err", "width", "180px");
//	}
//	{
//		c1 := css.AppendObject()
//		c1.SetKeyValues("id", "conf", "width", "500px");
//	}
//	PrjHttpUtils.JSON2TableEx(rec.RespW, strTitle, json.AsJSONString(false), css)
//}
//
//func OnHttPlugDo(w http.ResponseWriter, r *http.Request) {
//	rec := NewPrjHttpRec(w, r)
//	rec.CheckDecodeBody()
//	defer rec.Close()
//	plugid := rec.QryAsString("id", "")
//	obj := FindPluginByID(plugid)
//	if obj == nil {
//		http.Error(w, fmt.Sprintf("plug:%s not found!", plugid), 503)
//	} else {
//		if intf, ok := obj.(IHttpDo); ok {
//			rval, errcode, err := intf.OnHttpDo(rec)
//			if err != nil {
//				rec.ResponseJSONValues("code", -1, "errcode", errcode, "msg", err.Error())
//			} else {
//				if json, ok := rval.(*wrapper.SuperValue); ok {
//					PrjHttpUtils.ResponseJSON2(w, json)
//				}
//			}
//		} else {
//			http.Error(w, fmt.Sprintf("plug:%s not support IHttpDo", plugid), 503)
//		}
//	}
//}
//
//type HandlerWrapper struct {
//	fn http.HandlerFunc
//}
//
//func (this HandlerWrapper) ServeHTTP(w http.ResponseWriter, r *http.Request) {
//	this.fn(w, r)
//}
//
